// yield/uri/uri_parser.cpp

// Copyright (c) 2011 Minor Gordon
// All rights reserved

// This source file is part of the Yield project.

// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Yield project nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.

// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL Minor Gordon BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

/* #line 1 "./src/yield/uri/uri_parser.rl" */
// yield/uri/uri_parser.rl

// Copyright (c) 2011 Minor Gordon
// All rights reserved

// This source file is part of the Yield project.

// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// * Neither the name of the Yield project nor the
// names of its contributors may be used to endorse or promote products
// derived from this software without specific prior written permission.

// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL Minor Gordon BE LIABLE FOR ANY DIRECT,
// INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

#include "yield/uri/uri_parser.hpp"

#include <stdlib.h> // For atoi

#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable: 4702)
#else
#pragma GCC diagnostic ignored "-Wold-style-cast"
#pragma GCC diagnostic ignored "-Wunused-variable"
#endif

namespace yield {
namespace uri {
bool
URIParser::parse(
  iovec& fragment,
  iovec& host,
  iovec& path,
  uint16_t& port,
  iovec& query,
  iovec& scheme,
  iovec& userinfo
) {
  memset(&fragment, 0, sizeof(fragment));
  memset(&host, 0, sizeof(host));
  memset(&path, 0, sizeof(path));
  port = 0;
  memset(&query, 0, sizeof(query));
  memset(&scheme, 0, sizeof(scheme));
  memset(&userinfo, 0, sizeof(userinfo));

  int cs;
  const char* eof = pe;


  /* #line 69 "./src/yield/uri/uri_parser.cpp" */
  static const char _parse_uri_reference_actions[] = {
    0, 1, 1, 1, 3, 1, 4, 1,
    5, 1, 6, 1, 7, 1, 8, 1,
    9, 1, 10, 1, 11, 1, 12, 2,
    0, 7, 2, 2, 3, 2, 2, 4,
    2, 4, 5, 2, 5, 7, 2, 6,
    7, 2, 7, 8, 2, 9, 10, 2,
    11, 12, 3, 2, 4, 5, 3, 4,
    5, 7, 3, 5, 7, 8, 3, 6,
    7, 8, 4, 4, 5, 7, 8
  };

  static const short _parse_uri_reference_key_offsets[] = {
    0, 0, 14, 20, 26, 32, 38, 44,
    50, 56, 62, 68, 74, 88, 94, 100,
    106, 112, 120, 126, 132, 138, 145, 152,
    158, 164, 170, 177, 184, 190, 196, 202,
    209, 216, 222, 228, 234, 241, 248, 254,
    260, 266, 273, 280, 286, 292, 298, 305,
    315, 322, 327, 328, 333, 334, 339, 340,
    343, 346, 352, 355, 358, 361, 367, 370,
    373, 376, 382, 385, 391, 397, 404, 410,
    417, 423, 429, 435, 443, 450, 456, 462,
    468, 475, 482, 488, 494, 500, 507, 514,
    520, 526, 532, 539, 546, 552, 558, 564,
    571, 578, 584, 590, 596, 603, 610, 616,
    622, 628, 635, 642, 648, 654, 660, 667,
    674, 680, 686, 692, 699, 706, 712, 718,
    724, 731, 738, 744, 750, 756, 763, 770,
    776, 782, 788, 795, 802, 808, 814, 820,
    827, 834, 840, 846, 852, 859, 866, 872,
    878, 884, 891, 898, 904, 910, 916, 923,
    930, 936, 942, 948, 955, 962, 968, 974,
    980, 987, 994, 1000, 1006, 1012, 1019, 1026,
    1032, 1038, 1044, 1051, 1058, 1064, 1070, 1076,
    1083, 1090, 1096, 1102, 1108, 1115, 1122, 1128,
    1134, 1140, 1147, 1154, 1160, 1166, 1172, 1179,
    1186, 1192, 1198, 1204, 1211, 1218, 1224, 1230,
    1236, 1243, 1250, 1256, 1262, 1268, 1275, 1282,
    1288, 1294, 1300, 1307, 1314, 1320, 1326, 1332,
    1339, 1346, 1352, 1358, 1364, 1371, 1378, 1384,
    1390, 1396, 1403, 1410, 1416, 1422, 1428, 1435,
    1442, 1448, 1454, 1460, 1467, 1474, 1480, 1486,
    1492, 1499, 1506, 1512, 1518, 1524, 1531, 1538,
    1544, 1550, 1556, 1563, 1570, 1576, 1582, 1588,
    1595, 1602, 1608, 1614, 1620, 1627, 1634, 1640,
    1646, 1652, 1659, 1666, 1672, 1678, 1684, 1691,
    1698, 1704, 1710, 1716, 1723, 1730, 1736, 1742,
    1748, 1755, 1762, 1768, 1774, 1780, 1787, 1794,
    1800, 1806, 1812, 1819, 1826, 1832, 1838, 1844,
    1851, 1858, 1864, 1870, 1876, 1883, 1890, 1896,
    1902, 1908, 1915, 1922, 1928, 1934, 1940, 1947,
    1954, 1960, 1966, 1972, 1979, 1986, 1992, 1998,
    2004, 2011, 2018, 2024, 2030, 2036, 2043, 2050,
    2056, 2062, 2068, 2075, 2082, 2088, 2094, 2100,
    2107, 2114, 2120, 2126, 2132, 2139, 2146, 2152,
    2158, 2164, 2171, 2178, 2184, 2190, 2196, 2203,
    2210, 2216, 2222, 2228, 2235, 2242, 2248, 2254,
    2260, 2267, 2274, 2280, 2286, 2292, 2299, 2306,
    2312, 2318, 2324, 2331, 2338, 2344, 2350, 2356,
    2363, 2370, 2376, 2382, 2388, 2395, 2404, 2411,
    2417, 2423, 2430, 2436, 2445, 2452, 2458, 2464,
    2472, 2478, 2487, 2494, 2500, 2506, 2514, 2520,
    2526, 2532, 2538, 2544, 2551, 2558, 2565, 2572,
    2582, 2591, 2598, 2605, 2612, 2619, 2626, 2636,
    2645, 2652, 2659, 2666, 2673, 2680, 2690, 2699,
    2706, 2713, 2719, 2725, 2731, 2737, 2745, 2751,
    2757, 2763, 2769, 2776, 2782, 2788, 2794, 2800,
    2807, 2816, 2823, 2829, 2835, 2842, 2848, 2855,
    2862, 2869, 2879, 2888, 2895, 2902, 2911, 2918,
    2924, 2930, 2937, 2943, 2949, 2955, 2961, 2967,
    2975, 2984, 2991, 2997, 3003, 3010, 3016, 3023,
    3030, 3037, 3047, 3056, 3063, 3070, 3077, 3084,
    3091, 3101, 3110, 3117, 3124, 3130, 3136, 3142,
    3148, 3155, 3164, 3171, 3177, 3183, 3190, 3196,
    3202, 3208, 3214, 3220, 3228, 3235, 3242, 3249,
    3259, 3268, 3275, 3282, 3288, 3294, 3300, 3306,
    3313, 3319, 3325, 3331, 3337, 3344, 3350, 3356,
    3362, 3368, 3375, 3385, 3392, 3398, 3404, 3412,
    3418, 3427, 3434, 3440, 3446, 3454, 3460, 3467,
    3474, 3481, 3491, 3500, 3507, 3514, 3521, 3528,
    3535, 3545, 3554, 3561, 3568, 3574, 3580, 3586,
    3592, 3600, 3610, 3617, 3623, 3629, 3636, 3642,
    3649, 3656, 3663, 3673, 3682, 3689, 3696, 3702,
    3708, 3714, 3720, 3728, 3737, 3744, 3750, 3756,
    3764, 3770, 3777, 3784, 3791, 3801, 3810, 3817,
    3824, 3831, 3837, 3843, 3849, 3857, 3864, 3871,
    3878, 3888, 3897, 3904, 3911, 3921, 3928, 3934,
    3940, 3948, 3954, 3963, 3970, 3977, 3984, 3994,
    4003, 4010, 4017, 4018, 4028, 4035, 4041, 4047,
    4055, 4061, 4070, 4077, 4084, 4091, 4101, 4110,
    4117, 4124, 4130, 4137, 4150, 4164, 4176, 4191,
    4202, 4213, 4226, 4238, 4250, 4264, 4281, 4297,
    4316, 4332, 4347, 4352, 4357, 4361, 4380
  };

  static const unsigned char _parse_uri_reference_trans_keys[] = {
    33u, 37u, 47u, 59u, 61u, 64u, 95u, 126u,
    36u, 57u, 65u, 90u, 97u, 122u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 33u, 37u, 61u, 64u, 95u, 126u,
    36u, 46u, 48u, 59u, 65u, 90u, 97u, 122u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    58u, 118u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 49u, 50u, 58u, 51u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 49u, 50u, 51u, 57u, 46u,
    48u, 49u, 50u, 51u, 57u, 46u, 48u, 49u,
    50u, 51u, 57u, 93u, 93u, 48u, 57u, 93u,
    48u, 57u, 53u, 93u, 48u, 52u, 54u, 57u,
    93u, 48u, 53u, 46u, 48u, 57u, 46u, 48u,
    57u, 46u, 53u, 48u, 52u, 54u, 57u, 46u,
    48u, 53u, 46u, 48u, 57u, 46u, 48u, 57u,
    46u, 53u, 48u, 52u, 54u, 57u, 46u, 48u,
    53u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 58u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 93u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 93u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 49u, 50u, 51u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 58u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 49u, 50u, 51u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    58u, 93u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 49u,
    50u, 51u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 93u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    93u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 53u, 48u, 52u,
    54u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    53u, 54u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 53u, 48u, 52u, 54u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 53u, 54u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 53u, 48u, 52u, 54u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 53u, 54u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 93u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    58u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    49u, 50u, 51u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 53u, 48u,
    52u, 54u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 53u, 54u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 49u,
    50u, 51u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 58u,
    93u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    49u, 50u, 51u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 58u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 53u, 48u,
    52u, 54u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 53u, 54u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 53u, 48u, 52u, 54u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 53u,
    54u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 49u, 50u, 51u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 58u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 93u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 53u, 48u, 52u, 54u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 53u, 54u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 58u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    58u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    49u, 50u, 93u, 51u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 93u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 49u, 50u, 51u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 58u, 93u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 53u, 48u, 52u, 54u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 53u, 54u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    53u, 48u, 52u, 54u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 53u, 54u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    58u, 93u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 49u, 50u, 93u, 51u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 58u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    53u, 48u, 52u, 54u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 53u, 54u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 57u, 65u, 70u, 97u, 102u,
    58u, 93u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 49u, 50u, 51u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 93u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    53u, 48u, 52u, 54u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 53u, 54u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    93u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 93u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 46u,
    48u, 57u, 65u, 70u, 97u, 102u, 46u, 53u,
    48u, 52u, 54u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 53u, 54u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    49u, 50u, 93u, 51u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    48u, 57u, 65u, 70u, 97u, 102u, 48u, 57u,
    65u, 70u, 97u, 102u, 58u, 93u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 48u, 49u, 50u, 51u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 46u, 48u, 57u, 65u, 70u, 97u, 102u,
    46u, 53u, 48u, 52u, 54u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 53u, 54u, 57u, 65u,
    70u, 97u, 102u, 46u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 58u, 48u, 49u, 50u, 93u, 51u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 48u, 57u, 65u, 70u, 97u,
    102u, 48u, 57u, 65u, 70u, 97u, 102u, 58u,
    93u, 48u, 57u, 65u, 70u, 97u, 102u, 48u,
    57u, 65u, 70u, 97u, 102u, 48u, 49u, 50u,
    51u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 46u, 48u, 57u, 65u,
    70u, 97u, 102u, 46u, 53u, 48u, 52u, 54u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 53u,
    54u, 57u, 65u, 70u, 97u, 102u, 46u, 48u,
    57u, 65u, 70u, 97u, 102u, 46u, 48u, 57u,
    65u, 70u, 97u, 102u, 48u, 57u, 65u, 70u,
    97u, 102u, 46u, 48u, 57u, 65u, 70u, 97u,
    102u, 33u, 36u, 61u, 95u, 126u, 38u, 46u,
    48u, 59u, 65u, 90u, 97u, 122u, 33u, 36u,
    61u, 93u, 95u, 126u, 38u, 46u, 48u, 59u,
    65u, 90u, 97u, 122u, 33u, 37u, 47u, 61u,
    95u, 126u, 36u, 59u, 64u, 90u, 97u, 122u,
    33u, 35u, 37u, 47u, 59u, 61u, 63u, 95u,
    126u, 36u, 57u, 64u, 90u, 97u, 122u, 33u,
    37u, 61u, 95u, 126u, 36u, 59u, 63u, 90u,
    97u, 122u, 33u, 37u, 61u, 95u, 126u, 36u,
    59u, 63u, 90u, 97u, 122u, 33u, 35u, 37u,
    61u, 63u, 95u, 126u, 36u, 59u, 64u, 90u,
    97u, 122u, 33u, 35u, 37u, 61u, 95u, 126u,
    36u, 59u, 63u, 90u, 97u, 122u, 33u, 35u,
    37u, 61u, 95u, 126u, 36u, 59u, 63u, 90u,
    97u, 122u, 33u, 35u, 37u, 47u, 61u, 63u,
    95u, 126u, 36u, 59u, 64u, 90u, 97u, 122u,
    33u, 35u, 37u, 47u, 58u, 61u, 63u, 64u,
    91u, 95u, 126u, 36u, 59u, 65u, 90u, 97u,
    122u, 33u, 35u, 37u, 47u, 58u, 61u, 63u,
    64u, 95u, 126u, 36u, 59u, 65u, 90u, 97u,
    122u, 33u, 35u, 37u, 47u, 61u, 63u, 64u,
    95u, 126u, 36u, 46u, 48u, 57u, 58u, 59u,
    65u, 90u, 97u, 122u, 33u, 35u, 37u, 47u,
    58u, 61u, 63u, 91u, 95u, 126u, 36u, 59u,
    65u, 90u, 97u, 122u, 33u, 35u, 37u, 47u,
    58u, 61u, 63u, 95u, 126u, 36u, 59u, 65u,
    90u, 97u, 122u, 35u, 47u, 63u, 48u, 57u,
    35u, 47u, 63u, 48u, 57u, 35u, 47u, 58u,
    63u, 33u, 35u, 37u, 47u, 61u, 63u, 64u,
    95u, 126u, 36u, 46u, 48u, 57u, 58u, 59u,
    65u, 90u, 97u, 122u, 33u, 35u, 37u, 43u,
    47u, 58u, 59u, 61u, 63u, 64u, 95u, 126u,
    36u, 44u, 45u, 57u, 65u, 90u, 97u, 122u,
    0
  };

  static const char _parse_uri_reference_single_lengths[] = {
    0, 8, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 6, 0, 0, 0,
    0, 2, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 4,
    1, 3, 1, 3, 1, 3, 1, 1,
    1, 2, 1, 1, 1, 2, 1, 1,
    1, 2, 1, 0, 0, 1, 0, 1,
    0, 0, 0, 2, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 1, 0, 0,
    0, 1, 1, 0, 0, 0, 1, 1,
    0, 0, 0, 1, 1, 0, 0, 0,
    1, 1, 0, 0, 0, 1, 1, 0,
    0, 0, 1, 1, 0, 0, 0, 1,
    1, 0, 0, 0, 1, 3, 1, 0,
    0, 1, 0, 3, 1, 0, 0, 2,
    0, 3, 1, 0, 0, 2, 0, 0,
    0, 0, 0, 1, 1, 1, 1, 2,
    1, 1, 1, 1, 1, 1, 2, 1,
    1, 1, 1, 1, 1, 2, 1, 1,
    1, 0, 0, 0, 0, 2, 0, 0,
    0, 0, 1, 0, 0, 0, 0, 1,
    3, 1, 0, 0, 1, 0, 1, 1,
    1, 2, 1, 1, 1, 3, 1, 0,
    0, 1, 0, 0, 0, 0, 0, 2,
    3, 1, 0, 0, 1, 0, 1, 1,
    1, 2, 1, 1, 1, 1, 1, 1,
    2, 1, 1, 1, 0, 0, 0, 0,
    1, 3, 1, 0, 0, 1, 0, 0,
    0, 0, 0, 2, 1, 1, 1, 2,
    1, 1, 1, 0, 0, 0, 0, 1,
    0, 0, 0, 0, 1, 0, 0, 0,
    0, 1, 4, 1, 0, 0, 2, 0,
    3, 1, 0, 0, 2, 0, 1, 1,
    1, 2, 1, 1, 1, 1, 1, 1,
    2, 1, 1, 1, 0, 0, 0, 0,
    2, 4, 1, 0, 0, 1, 0, 1,
    1, 1, 2, 1, 1, 1, 0, 0,
    0, 0, 2, 3, 1, 0, 0, 2,
    0, 1, 1, 1, 2, 1, 1, 1,
    1, 0, 0, 0, 2, 1, 1, 1,
    2, 1, 1, 1, 4, 1, 0, 0,
    2, 0, 3, 1, 1, 1, 2, 1,
    1, 1, 1, 4, 1, 0, 0, 2,
    0, 3, 1, 1, 1, 2, 1, 1,
    1, 0, 1, 5, 6, 6, 9, 5,
    5, 7, 6, 6, 8, 11, 10, 9,
    10, 9, 3, 3, 4, 9, 12
  };

  static const char _parse_uri_reference_range_lengths[] = {
    0, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 4, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 1, 0, 1, 0, 1, 0, 1,
    1, 2, 1, 1, 1, 2, 1, 1,
    1, 2, 1, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 4,
    4, 3, 3, 3, 3, 3, 4, 4,
    3, 3, 3, 3, 3, 4, 4, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 4, 4, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 4, 4, 3, 3, 3, 3, 3,
    4, 4, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 4,
    4, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 4, 4, 3, 3, 3, 3, 3,
    4, 4, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 4, 4, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 4, 4, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 3,
    4, 4, 3, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 4, 4,
    3, 3, 0, 3, 3, 3, 3, 3,
    3, 3, 3, 3, 3, 4, 4, 3,
    3, 3, 3, 4, 4, 3, 3, 3,
    3, 3, 3, 3, 3, 3, 3, 5,
    3, 3, 1, 1, 0, 5, 4
  };

  static const short _parse_uri_reference_index_offsets[] = {
    0, 0, 12, 16, 20, 24, 28, 32,
    36, 40, 44, 48, 52, 63, 67, 71,
    75, 79, 85, 89, 93, 97, 102, 107,
    111, 115, 119, 124, 129, 133, 137, 141,
    146, 151, 155, 159, 163, 168, 173, 177,
    181, 185, 190, 195, 199, 203, 207, 212,
    220, 225, 230, 232, 237, 239, 244, 246,
    249, 252, 257, 260, 263, 266, 271, 274,
    277, 280, 285, 288, 292, 296, 301, 305,
    310, 314, 318, 322, 328, 333, 337, 341,
    345, 350, 355, 359, 363, 367, 372, 377,
    381, 385, 389, 394, 399, 403, 407, 411,
    416, 421, 425, 429, 433, 438, 443, 447,
    451, 455, 460, 465, 469, 473, 477, 482,
    487, 491, 495, 499, 504, 509, 513, 517,
    521, 526, 531, 535, 539, 543, 548, 553,
    557, 561, 565, 570, 575, 579, 583, 587,
    592, 597, 601, 605, 609, 614, 619, 623,
    627, 631, 636, 641, 645, 649, 653, 658,
    663, 667, 671, 675, 680, 685, 689, 693,
    697, 702, 707, 711, 715, 719, 724, 729,
    733, 737, 741, 746, 751, 755, 759, 763,
    768, 773, 777, 781, 785, 790, 795, 799,
    803, 807, 812, 817, 821, 825, 829, 834,
    839, 843, 847, 851, 856, 861, 865, 869,
    873, 878, 883, 887, 891, 895, 900, 905,
    909, 913, 917, 922, 927, 931, 935, 939,
    944, 949, 953, 957, 961, 966, 971, 975,
    979, 983, 988, 993, 997, 1001, 1005, 1010,
    1015, 1019, 1023, 1027, 1032, 1037, 1041, 1045,
    1049, 1054, 1059, 1063, 1067, 1071, 1076, 1081,
    1085, 1089, 1093, 1098, 1103, 1107, 1111, 1115,
    1120, 1125, 1129, 1133, 1137, 1142, 1147, 1151,
    1155, 1159, 1164, 1169, 1173, 1177, 1181, 1186,
    1191, 1195, 1199, 1203, 1208, 1213, 1217, 1221,
    1225, 1230, 1235, 1239, 1243, 1247, 1252, 1257,
    1261, 1265, 1269, 1274, 1279, 1283, 1287, 1291,
    1296, 1301, 1305, 1309, 1313, 1318, 1323, 1327,
    1331, 1335, 1340, 1345, 1349, 1353, 1357, 1362,
    1367, 1371, 1375, 1379, 1384, 1389, 1393, 1397,
    1401, 1406, 1411, 1415, 1419, 1423, 1428, 1433,
    1437, 1441, 1445, 1450, 1455, 1459, 1463, 1467,
    1472, 1477, 1481, 1485, 1489, 1494, 1499, 1503,
    1507, 1511, 1516, 1521, 1525, 1529, 1533, 1538,
    1543, 1547, 1551, 1555, 1560, 1565, 1569, 1573,
    1577, 1582, 1587, 1591, 1595, 1599, 1604, 1609,
    1613, 1617, 1621, 1626, 1631, 1635, 1639, 1643,
    1648, 1653, 1657, 1661, 1665, 1670, 1677, 1682,
    1686, 1690, 1695, 1699, 1706, 1711, 1715, 1719,
    1725, 1729, 1736, 1741, 1745, 1749, 1755, 1759,
    1763, 1767, 1771, 1775, 1780, 1785, 1790, 1795,
    1802, 1808, 1813, 1818, 1823, 1828, 1833, 1840,
    1846, 1851, 1856, 1861, 1866, 1871, 1878, 1884,
    1889, 1894, 1898, 1902, 1906, 1910, 1916, 1920,
    1924, 1928, 1932, 1937, 1941, 1945, 1949, 1953,
    1958, 1965, 1970, 1974, 1978, 1983, 1987, 1992,
    1997, 2002, 2009, 2015, 2020, 2025, 2032, 2037,
    2041, 2045, 2050, 2054, 2058, 2062, 2066, 2070,
    2076, 2083, 2088, 2092, 2096, 2101, 2105, 2110,
    2115, 2120, 2127, 2133, 2138, 2143, 2148, 2153,
    2158, 2165, 2171, 2176, 2181, 2185, 2189, 2193,
    2197, 2202, 2209, 2214, 2218, 2222, 2227, 2231,
    2235, 2239, 2243, 2247, 2253, 2258, 2263, 2268,
    2275, 2281, 2286, 2291, 2295, 2299, 2303, 2307,
    2312, 2316, 2320, 2324, 2328, 2333, 2337, 2341,
    2345, 2349, 2354, 2362, 2367, 2371, 2375, 2381,
    2385, 2392, 2397, 2401, 2405, 2411, 2415, 2420,
    2425, 2430, 2437, 2443, 2448, 2453, 2458, 2463,
    2468, 2475, 2481, 2486, 2491, 2495, 2499, 2503,
    2507, 2513, 2521, 2526, 2530, 2534, 2539, 2543,
    2548, 2553, 2558, 2565, 2571, 2576, 2581, 2585,
    2589, 2593, 2597, 2603, 2610, 2615, 2619, 2623,
    2629, 2633, 2638, 2643, 2648, 2655, 2661, 2666,
    2671, 2676, 2680, 2684, 2688, 2694, 2699, 2704,
    2709, 2716, 2722, 2727, 2732, 2740, 2745, 2749,
    2753, 2759, 2763, 2770, 2775, 2780, 2785, 2792,
    2798, 2803, 2808, 2810, 2818, 2823, 2827, 2831,
    2837, 2841, 2848, 2853, 2858, 2863, 2870, 2876,
    2881, 2886, 2890, 2895, 2905, 2916, 2926, 2939,
    2948, 2957, 2968, 2978, 2988, 3000, 3015, 3029,
    3044, 3058, 3071, 3076, 3081, 3086, 3101
  };

  static const short _parse_uri_reference_indicies[] = {
    0, 2, 3, 0, 0, 0, 0, 0,
    0, 4, 4, 1, 5, 5, 5, 1,
    6, 6, 6, 1, 7, 7, 7, 1,
    8, 8, 8, 1, 9, 9, 9, 1,
    10, 10, 10, 1, 11, 11, 11, 1,
    12, 12, 12, 1, 13, 13, 13, 1,
    14, 14, 14, 1, 15, 16, 15, 17,
    15, 15, 15, 15, 15, 15, 1, 18,
    18, 18, 1, 15, 15, 15, 1, 19,
    19, 19, 1, 20, 20, 20, 1, 22,
    23, 21, 21, 21, 1, 24, 24, 24,
    1, 25, 25, 25, 1, 26, 26, 26,
    1, 27, 21, 21, 21, 1, 29, 28,
    28, 28, 1, 30, 30, 30, 1, 31,
    31, 31, 1, 32, 32, 32, 1, 33,
    28, 28, 28, 1, 35, 34, 34, 34,
    1, 36, 36, 36, 1, 37, 37, 37,
    1, 38, 38, 38, 1, 39, 34, 34,
    34, 1, 41, 40, 40, 40, 1, 42,
    42, 42, 1, 43, 43, 43, 1, 44,
    44, 44, 1, 45, 40, 40, 40, 1,
    47, 46, 46, 46, 1, 48, 48, 48,
    1, 49, 49, 49, 1, 50, 50, 50,
    1, 51, 46, 46, 46, 1, 53, 52,
    52, 52, 1, 54, 54, 54, 1, 55,
    55, 55, 1, 56, 56, 56, 1, 57,
    52, 52, 52, 1, 58, 59, 60, 62,
    61, 63, 63, 1, 64, 65, 65, 65,
    1, 66, 67, 68, 69, 1, 70, 1,
    71, 72, 73, 74, 1, 75, 1, 76,
    77, 78, 79, 1, 80, 1, 80, 79,
    1, 80, 76, 1, 81, 80, 79, 76,
    1, 80, 76, 1, 75, 74, 1, 75,
    71, 1, 75, 82, 74, 71, 1, 75,
    71, 1, 70, 69, 1, 70, 66, 1,
    70, 83, 69, 66, 1, 70, 66, 1,
    84, 84, 84, 1, 85, 85, 85, 1,
    86, 63, 63, 63, 1, 65, 65, 65,
    1, 88, 87, 87, 87, 1, 89, 89,
    89, 1, 90, 90, 90, 1, 91, 91,
    91, 1, 92, 80, 87, 87, 87, 1,
    35, 93, 93, 93, 1, 94, 94, 94,
    1, 95, 95, 95, 1, 96, 96, 96,
    1, 97, 93, 93, 93, 1, 53, 98,
    98, 98, 1, 99, 99, 99, 1, 100,
    100, 100, 1, 101, 101, 101, 1, 102,
    98, 98, 98, 1, 47, 103, 103, 103,
    1, 104, 104, 104, 1, 105, 105, 105,
    1, 106, 106, 106, 1, 107, 103, 103,
    103, 1, 109, 108, 108, 108, 1, 110,
    110, 110, 1, 111, 111, 111, 1, 112,
    112, 112, 1, 113, 108, 108, 108, 1,
    35, 114, 114, 114, 1, 115, 115, 115,
    1, 116, 116, 116, 1, 117, 117, 117,
    1, 118, 114, 114, 114, 1, 120, 119,
    119, 119, 1, 121, 121, 121, 1, 122,
    122, 122, 1, 123, 123, 123, 1, 124,
    119, 119, 119, 1, 35, 125, 125, 125,
    1, 126, 126, 126, 1, 127, 127, 127,
    1, 128, 128, 128, 1, 129, 125, 125,
    125, 1, 41, 130, 130, 130, 1, 131,
    131, 131, 1, 132, 132, 132, 1, 133,
    133, 133, 1, 134, 130, 130, 130, 1,
    136, 135, 135, 135, 1, 137, 137, 137,
    1, 138, 138, 138, 1, 139, 139, 139,
    1, 140, 135, 135, 135, 1, 53, 141,
    141, 141, 1, 142, 142, 142, 1, 143,
    143, 143, 1, 144, 144, 144, 1, 145,
    141, 141, 141, 1, 35, 146, 146, 146,
    1, 147, 147, 147, 1, 148, 148, 148,
    1, 149, 149, 149, 1, 150, 146, 146,
    146, 1, 88, 151, 151, 151, 1, 152,
    152, 152, 1, 153, 153, 153, 1, 154,
    154, 154, 1, 155, 151, 151, 151, 1,
    35, 156, 156, 156, 1, 157, 157, 157,
    1, 158, 158, 158, 1, 159, 159, 159,
    1, 160, 156, 156, 156, 1, 162, 161,
    161, 161, 1, 163, 163, 163, 1, 164,
    164, 164, 1, 165, 165, 165, 1, 166,
    161, 161, 161, 1, 47, 167, 167, 167,
    1, 168, 168, 168, 1, 169, 169, 169,
    1, 170, 170, 170, 1, 171, 167, 167,
    167, 1, 41, 172, 172, 172, 1, 173,
    173, 173, 1, 174, 174, 174, 1, 175,
    175, 175, 1, 176, 172, 172, 172, 1,
    35, 177, 177, 177, 1, 178, 178, 178,
    1, 179, 179, 179, 1, 180, 180, 180,
    1, 181, 177, 177, 177, 1, 120, 182,
    182, 182, 1, 183, 183, 183, 1, 184,
    184, 184, 1, 185, 185, 185, 1, 186,
    182, 182, 182, 1, 62, 187, 187, 187,
    1, 188, 188, 188, 1, 189, 189, 189,
    1, 190, 190, 190, 1, 191, 187, 187,
    187, 1, 41, 192, 192, 192, 1, 193,
    193, 193, 1, 194, 194, 194, 1, 195,
    195, 195, 1, 196, 192, 192, 192, 1,
    47, 197, 197, 197, 1, 198, 198, 198,
    1, 199, 199, 199, 1, 200, 200, 200,
    1, 201, 197, 197, 197, 1, 53, 202,
    202, 202, 1, 203, 203, 203, 1, 204,
    204, 204, 1, 205, 205, 205, 1, 206,
    202, 202, 202, 1, 35, 207, 207, 207,
    1, 208, 208, 208, 1, 209, 209, 209,
    1, 210, 210, 210, 1, 211, 207, 207,
    207, 1, 213, 212, 212, 212, 1, 214,
    214, 214, 1, 215, 215, 215, 1, 216,
    216, 216, 1, 217, 212, 212, 212, 1,
    35, 218, 218, 218, 1, 219, 219, 219,
    1, 220, 220, 220, 1, 221, 221, 221,
    1, 222, 218, 218, 218, 1, 53, 223,
    223, 223, 1, 224, 224, 224, 1, 225,
    225, 225, 1, 226, 226, 226, 1, 227,
    223, 223, 223, 1, 47, 228, 228, 228,
    1, 229, 229, 229, 1, 230, 230, 230,
    1, 231, 231, 231, 1, 232, 228, 228,
    228, 1, 41, 233, 233, 233, 1, 234,
    234, 234, 1, 235, 235, 235, 1, 236,
    236, 236, 1, 237, 233, 233, 233, 1,
    62, 238, 238, 238, 1, 239, 239, 239,
    1, 240, 240, 240, 1, 241, 241, 241,
    1, 242, 238, 238, 238, 1, 120, 243,
    243, 243, 1, 244, 244, 244, 1, 245,
    245, 245, 1, 246, 246, 246, 1, 247,
    243, 243, 243, 1, 35, 248, 248, 248,
    1, 249, 249, 249, 1, 250, 250, 250,
    1, 251, 251, 251, 1, 252, 248, 248,
    248, 1, 41, 253, 253, 253, 1, 254,
    254, 254, 1, 255, 255, 255, 1, 256,
    256, 256, 1, 257, 253, 253, 253, 1,
    47, 258, 258, 258, 1, 259, 259, 259,
    1, 260, 260, 260, 1, 261, 261, 261,
    1, 262, 258, 258, 258, 1, 162, 263,
    263, 263, 1, 264, 264, 264, 1, 265,
    265, 265, 1, 266, 266, 266, 1, 267,
    263, 263, 263, 1, 35, 268, 268, 268,
    1, 269, 269, 269, 1, 270, 270, 270,
    1, 271, 271, 271, 1, 272, 268, 268,
    268, 1, 88, 273, 273, 273, 1, 274,
    274, 274, 1, 275, 275, 275, 1, 276,
    276, 276, 1, 277, 273, 273, 273, 1,
    35, 278, 278, 278, 1, 279, 279, 279,
    1, 280, 280, 280, 1, 281, 281, 281,
    1, 282, 278, 278, 278, 1, 53, 283,
    283, 283, 1, 284, 284, 284, 1, 285,
    285, 285, 1, 286, 286, 286, 1, 287,
    283, 283, 283, 1, 136, 288, 288, 288,
    1, 289, 289, 289, 1, 290, 290, 290,
    1, 291, 291, 291, 1, 292, 288, 288,
    288, 1, 41, 293, 293, 293, 1, 294,
    294, 294, 1, 295, 295, 295, 1, 296,
    296, 296, 1, 297, 293, 293, 293, 1,
    35, 298, 298, 298, 1, 299, 299, 299,
    1, 300, 300, 300, 1, 301, 301, 301,
    1, 302, 298, 298, 298, 1, 120, 303,
    303, 303, 1, 304, 304, 304, 1, 305,
    305, 305, 1, 306, 306, 306, 1, 307,
    303, 303, 303, 1, 35, 308, 308, 308,
    1, 309, 309, 309, 1, 310, 310, 310,
    1, 311, 311, 311, 1, 312, 308, 308,
    308, 1, 109, 313, 313, 313, 1, 314,
    314, 314, 1, 315, 315, 315, 1, 316,
    316, 316, 1, 317, 313, 313, 313, 1,
    47, 318, 318, 318, 1, 319, 319, 319,
    1, 320, 320, 320, 1, 321, 321, 321,
    1, 322, 318, 318, 318, 1, 53, 323,
    323, 323, 1, 324, 324, 324, 1, 325,
    325, 325, 1, 326, 326, 326, 1, 327,
    323, 323, 323, 1, 35, 328, 328, 328,
    1, 329, 329, 329, 1, 330, 330, 330,
    1, 331, 331, 331, 1, 332, 328, 328,
    328, 1, 88, 333, 333, 333, 1, 334,
    334, 334, 1, 335, 335, 335, 1, 336,
    336, 336, 1, 337, 333, 333, 333, 1,
    62, 338, 338, 338, 1, 339, 339, 339,
    1, 340, 340, 340, 1, 341, 341, 341,
    1, 342, 338, 338, 338, 1, 53, 343,
    343, 343, 1, 344, 344, 344, 1, 345,
    345, 345, 1, 346, 346, 346, 1, 347,
    343, 343, 343, 1, 47, 348, 348, 348,
    1, 349, 349, 349, 1, 350, 350, 350,
    1, 351, 351, 351, 1, 352, 348, 348,
    348, 1, 41, 353, 353, 353, 1, 354,
    354, 354, 1, 355, 355, 355, 1, 356,
    356, 356, 1, 357, 353, 353, 353, 1,
    35, 358, 358, 358, 1, 359, 359, 359,
    1, 360, 360, 360, 1, 361, 361, 361,
    1, 362, 358, 358, 358, 1, 364, 363,
    363, 363, 1, 365, 365, 365, 1, 366,
    366, 366, 1, 367, 367, 367, 1, 368,
    363, 363, 363, 1, 35, 369, 369, 369,
    1, 370, 370, 370, 1, 371, 371, 371,
    1, 372, 372, 372, 1, 373, 369, 369,
    369, 1, 41, 374, 374, 374, 1, 375,
    375, 375, 1, 376, 376, 376, 1, 377,
    377, 377, 1, 378, 374, 374, 374, 1,
    47, 379, 379, 379, 1, 380, 380, 380,
    1, 381, 381, 381, 1, 382, 382, 382,
    1, 383, 379, 379, 379, 1, 53, 384,
    384, 384, 1, 385, 385, 385, 1, 386,
    386, 386, 1, 387, 387, 387, 1, 388,
    384, 384, 384, 1, 62, 389, 389, 389,
    1, 390, 390, 390, 1, 391, 391, 391,
    1, 392, 392, 392, 1, 393, 389, 389,
    389, 1, 88, 394, 394, 394, 1, 395,
    395, 395, 1, 396, 396, 396, 1, 397,
    397, 397, 1, 92, 394, 394, 394, 1,
    80, 398, 398, 398, 1, 399, 399, 399,
    1, 400, 400, 400, 1, 401, 401, 401,
    1, 402, 398, 398, 398, 1, 403, 404,
    405, 406, 407, 407, 1, 64, 408, 408,
    408, 1, 409, 409, 409, 1, 410, 410,
    410, 1, 411, 407, 407, 407, 1, 408,
    408, 408, 1, 412, 413, 414, 415, 416,
    416, 1, 64, 417, 417, 417, 1, 418,
    418, 418, 1, 419, 419, 419, 1, 420,
    80, 416, 416, 416, 1, 417, 417, 417,
    1, 421, 422, 423, 424, 425, 425, 1,
    64, 426, 426, 426, 1, 427, 427, 427,
    1, 428, 428, 428, 1, 429, 80, 425,
    425, 425, 1, 426, 426, 426, 1, 430,
    430, 430, 1, 431, 431, 431, 1, 432,
    432, 432, 1, 433, 433, 433, 1, 80,
    430, 430, 430, 1, 64, 434, 426, 426,
    1, 64, 435, 427, 427, 1, 64, 428,
    428, 428, 1, 64, 436, 434, 437, 426,
    426, 1, 64, 435, 427, 427, 427, 1,
    64, 427, 427, 427, 1, 64, 437, 426,
    426, 1, 64, 438, 417, 417, 1, 64,
    439, 418, 418, 1, 64, 419, 419, 419,
    1, 64, 440, 438, 441, 417, 417, 1,
    64, 439, 418, 418, 418, 1, 64, 418,
    418, 418, 1, 64, 441, 417, 417, 1,
    64, 442, 408, 408, 1, 64, 443, 409,
    409, 1, 64, 410, 410, 410, 1, 64,
    444, 442, 445, 408, 408, 1, 64, 443,
    409, 409, 409, 1, 64, 409, 409, 409,
    1, 64, 445, 408, 408, 1, 446, 446,
    446, 1, 447, 447, 447, 1, 448, 448,
    448, 1, 449, 449, 449, 1, 450, 80,
    446, 446, 446, 1, 451, 451, 451, 1,
    452, 452, 452, 1, 453, 453, 453, 1,
    454, 454, 454, 1, 455, 451, 451, 451,
    1, 456, 456, 456, 1, 457, 457, 457,
    1, 458, 458, 458, 1, 459, 459, 459,
    1, 460, 456, 456, 456, 1, 461, 462,
    463, 464, 465, 465, 1, 64, 466, 466,
    466, 1, 467, 467, 467, 1, 468, 468,
    468, 1, 429, 465, 465, 465, 1, 466,
    466, 466, 1, 64, 469, 466, 466, 1,
    64, 470, 467, 467, 1, 64, 468, 468,
    468, 1, 64, 471, 469, 472, 466, 466,
    1, 64, 470, 467, 467, 467, 1, 64,
    467, 467, 467, 1, 64, 472, 466, 466,
    1, 473, 474, 475, 476, 477, 477, 1,
    64, 478, 478, 478, 1, 479, 479, 479,
    1, 480, 480, 480, 1, 481, 477, 477,
    477, 1, 478, 478, 478, 1, 482, 482,
    482, 1, 483, 483, 483, 1, 484, 484,
    484, 1, 485, 485, 485, 1, 486, 80,
    482, 482, 482, 1, 487, 488, 489, 490,
    491, 491, 1, 64, 492, 492, 492, 1,
    493, 493, 493, 1, 494, 494, 494, 1,
    420, 491, 491, 491, 1, 492, 492, 492,
    1, 64, 495, 492, 492, 1, 64, 496,
    493, 493, 1, 64, 494, 494, 494, 1,
    64, 497, 495, 498, 492, 492, 1, 64,
    496, 493, 493, 493, 1, 64, 493, 493,
    493, 1, 64, 498, 492, 492, 1, 64,
    499, 478, 478, 1, 64, 500, 479, 479,
    1, 64, 480, 480, 480, 1, 64, 501,
    499, 502, 478, 478, 1, 64, 500, 479,
    479, 479, 1, 64, 479, 479, 479, 1,
    64, 502, 478, 478, 1, 503, 503, 503,
    1, 504, 504, 504, 1, 505, 505, 505,
    1, 506, 506, 506, 1, 507, 503, 503,
    503, 1, 508, 509, 510, 511, 512, 512,
    1, 64, 513, 513, 513, 1, 514, 514,
    514, 1, 515, 515, 515, 1, 516, 512,
    512, 512, 1, 513, 513, 513, 1, 517,
    517, 517, 1, 518, 518, 518, 1, 519,
    519, 519, 1, 520, 520, 520, 1, 460,
    80, 517, 517, 517, 1, 64, 521, 513,
    513, 1, 64, 522, 514, 514, 1, 64,
    515, 515, 515, 1, 64, 523, 521, 524,
    513, 513, 1, 64, 522, 514, 514, 514,
    1, 64, 514, 514, 514, 1, 64, 524,
    513, 513, 1, 525, 525, 525, 1, 526,
    526, 526, 1, 527, 527, 527, 1, 528,
    528, 528, 1, 529, 525, 525, 525, 1,
    530, 530, 530, 1, 531, 531, 531, 1,
    532, 532, 532, 1, 533, 533, 533, 1,
    486, 530, 530, 530, 1, 534, 534, 534,
    1, 535, 535, 535, 1, 536, 536, 536,
    1, 537, 537, 537, 1, 450, 534, 534,
    534, 1, 538, 539, 540, 80, 541, 542,
    542, 1, 64, 543, 543, 543, 1, 544,
    544, 544, 1, 545, 545, 545, 1, 546,
    80, 542, 542, 542, 1, 543, 543, 543,
    1, 547, 548, 549, 550, 551, 551, 1,
    64, 552, 552, 552, 1, 553, 553, 553,
    1, 554, 554, 554, 1, 411, 80, 551,
    551, 551, 1, 552, 552, 552, 1, 64,
    555, 552, 552, 1, 64, 556, 553, 553,
    1, 64, 554, 554, 554, 1, 64, 557,
    555, 558, 552, 552, 1, 64, 556, 553,
    553, 553, 1, 64, 553, 553, 553, 1,
    64, 558, 552, 552, 1, 64, 559, 543,
    543, 1, 64, 560, 544, 544, 1, 64,
    545, 545, 545, 1, 64, 561, 559, 562,
    543, 543, 1, 64, 560, 544, 544, 544,
    1, 64, 544, 544, 544, 1, 64, 562,
    543, 543, 1, 563, 563, 563, 1, 564,
    564, 564, 1, 565, 565, 565, 1, 566,
    566, 566, 1, 529, 80, 563, 563, 563,
    1, 567, 568, 569, 80, 570, 571, 571,
    1, 64, 572, 572, 572, 1, 573, 573,
    573, 1, 574, 574, 574, 1, 546, 571,
    571, 571, 1, 572, 572, 572, 1, 64,
    575, 572, 572, 1, 64, 576, 573, 573,
    1, 64, 574, 574, 574, 1, 64, 577,
    575, 578, 572, 572, 1, 64, 576, 573,
    573, 573, 1, 64, 573, 573, 573, 1,
    64, 578, 572, 572, 1, 579, 579, 579,
    1, 580, 580, 580, 1, 581, 581, 581,
    1, 582, 582, 582, 1, 507, 80, 579,
    579, 579, 1, 583, 584, 585, 586, 587,
    587, 1, 64, 588, 588, 588, 1, 589,
    589, 589, 1, 590, 590, 590, 1, 481,
    80, 587, 587, 587, 1, 588, 588, 588,
    1, 64, 591, 588, 588, 1, 64, 592,
    589, 589, 1, 64, 590, 590, 590, 1,
    64, 593, 591, 594, 588, 588, 1, 64,
    592, 589, 589, 589, 1, 64, 589, 589,
    589, 1, 64, 594, 588, 588, 1, 80,
    595, 595, 595, 1, 596, 596, 596, 1,
    597, 597, 597, 1, 598, 598, 598, 1,
    402, 80, 595, 595, 595, 1, 64, 599,
    65, 65, 1, 64, 600, 84, 84, 1,
    64, 85, 85, 85, 1, 64, 601, 599,
    602, 65, 65, 1, 64, 600, 84, 84,
    84, 1, 64, 84, 84, 84, 1, 64,
    602, 65, 65, 1, 603, 604, 605, 80,
    606, 607, 607, 1, 64, 608, 608, 608,
    1, 609, 609, 609, 1, 610, 610, 610,
    1, 611, 80, 607, 607, 607, 1, 608,
    608, 608, 1, 538, 539, 540, 541, 542,
    542, 1, 64, 612, 608, 608, 1, 64,
    613, 609, 609, 1, 64, 610, 610, 610,
    1, 64, 614, 612, 615, 608, 608, 1,
    64, 613, 609, 609, 609, 1, 64, 609,
    609, 609, 1, 64, 615, 608, 608, 1,
    616, 1, 617, 618, 619, 80, 620, 621,
    621, 1, 64, 622, 622, 622, 1, 623,
    623, 623, 1, 624, 624, 624, 1, 625,
    80, 621, 621, 621, 1, 622, 622, 622,
    1, 603, 604, 605, 606, 607, 607, 1,
    64, 626, 622, 622, 1, 64, 627, 623,
    623, 1, 64, 624, 624, 624, 1, 64,
    628, 626, 629, 622, 622, 1, 64, 627,
    623, 623, 623, 1, 64, 623, 623, 623,
    1, 64, 629, 622, 622, 1, 630, 630,
    630, 1, 631, 630, 630, 630, 1, 632,
    632, 632, 632, 632, 632, 632, 632, 632,
    1, 632, 632, 632, 80, 632, 632, 632,
    632, 632, 632, 1, 633, 634, 3, 633,
    633, 633, 633, 633, 633, 1, 8, 635,
    636, 10, 8, 8, 637, 8, 8, 8,
    8, 8, 1, 638, 639, 638, 638, 638,
    638, 638, 638, 1, 6, 640, 6, 6,
    6, 6, 6, 6, 1, 10, 635, 641,
    10, 637, 10, 10, 10, 10, 10, 1,
    642, 643, 644, 642, 642, 642, 642, 642,
    642, 1, 12, 645, 646, 12, 12, 12,
    12, 12, 12, 1, 10, 635, 641, 647,
    10, 637, 10, 10, 10, 10, 10, 1,
    648, 649, 650, 651, 652, 648, 653, 654,
    655, 648, 648, 648, 648, 648, 1, 14,
    656, 657, 658, 659, 14, 660, 17, 14,
    14, 14, 14, 14, 1, 15, 661, 16,
    662, 15, 664, 17, 15, 15, 15, 663,
    15, 15, 15, 1, 665, 649, 666, 651,
    667, 665, 653, 655, 665, 665, 665, 665,
    665, 1, 20, 656, 668, 658, 669, 20,
    660, 20, 20, 20, 20, 20, 1, 661,
    662, 664, 670, 1, 671, 633, 673, 672,
    1, 656, 658, 669, 660, 1, 15, 671,
    16, 633, 15, 673, 17, 15, 15, 15,
    674, 15, 15, 15, 1, 8, 635, 636,
    675, 10, 676, 8, 8, 637, 8, 8,
    8, 8, 675, 675, 675, 1, 0
  };

  static const short _parse_uri_reference_trans_targs[] = {
    630, 0, 4, 636, 646, 3, 632, 5,
    630, 7, 633, 9, 635, 11, 638, 12,
    13, 640, 14, 16, 641, 18, 610, 625,
    19, 20, 21, 22, 23, 596, 24, 25,
    26, 27, 28, 517, 29, 30, 31, 32,
    33, 507, 34, 35, 36, 37, 38, 484,
    39, 40, 41, 42, 43, 453, 44, 45,
    46, 47, 48, 589, 592, 595, 425, 70,
    49, 67, 50, 63, 65, 64, 51, 52,
    59, 61, 60, 53, 54, 55, 57, 56,
    644, 58, 62, 66, 68, 69, 71, 72,
    376, 73, 74, 75, 76, 77, 78, 79,
    80, 81, 82, 83, 84, 85, 86, 87,
    88, 89, 90, 91, 92, 548, 93, 94,
    95, 96, 97, 98, 99, 100, 101, 102,
    553, 103, 104, 105, 106, 107, 108, 109,
    110, 111, 112, 113, 114, 115, 116, 117,
    566, 118, 119, 120, 121, 122, 123, 124,
    125, 126, 127, 128, 129, 130, 131, 132,
    133, 134, 135, 136, 137, 138, 139, 140,
    141, 142, 571, 143, 144, 145, 146, 147,
    148, 149, 150, 151, 152, 153, 154, 155,
    156, 157, 158, 159, 160, 161, 162, 163,
    164, 165, 166, 167, 168, 169, 170, 171,
    172, 173, 174, 175, 176, 177, 178, 179,
    180, 181, 182, 183, 184, 185, 186, 187,
    188, 189, 190, 191, 192, 584, 193, 194,
    195, 196, 197, 198, 199, 200, 201, 202,
    203, 204, 205, 206, 207, 208, 209, 210,
    211, 212, 213, 214, 215, 216, 217, 218,
    219, 220, 221, 222, 223, 224, 225, 226,
    227, 228, 229, 230, 231, 232, 233, 234,
    235, 236, 237, 238, 239, 240, 241, 242,
    243, 244, 245, 246, 247, 248, 249, 250,
    251, 252, 253, 254, 255, 256, 257, 258,
    259, 260, 261, 262, 263, 264, 265, 266,
    267, 268, 269, 270, 271, 272, 273, 274,
    275, 276, 277, 278, 279, 280, 281, 282,
    283, 284, 285, 286, 287, 288, 289, 290,
    291, 292, 293, 294, 295, 296, 297, 298,
    299, 300, 301, 302, 303, 304, 305, 306,
    307, 308, 309, 310, 311, 312, 313, 314,
    315, 316, 317, 318, 319, 320, 321, 322,
    323, 324, 325, 326, 327, 328, 329, 330,
    331, 332, 333, 334, 335, 336, 337, 338,
    339, 340, 341, 342, 522, 343, 344, 345,
    346, 347, 348, 349, 350, 351, 352, 353,
    354, 355, 356, 357, 358, 359, 360, 361,
    362, 363, 364, 365, 366, 367, 368, 369,
    370, 371, 372, 373, 374, 375, 377, 378,
    379, 380, 381, 382, 418, 421, 424, 386,
    383, 384, 385, 387, 388, 411, 414, 417,
    392, 389, 390, 391, 393, 394, 404, 407,
    410, 398, 395, 396, 397, 399, 400, 401,
    402, 403, 405, 406, 408, 409, 412, 413,
    415, 416, 419, 420, 422, 423, 426, 427,
    428, 429, 430, 431, 432, 433, 434, 435,
    436, 437, 438, 439, 440, 441, 446, 449,
    452, 445, 442, 443, 444, 447, 448, 450,
    451, 454, 477, 480, 483, 458, 455, 456,
    457, 459, 460, 461, 462, 463, 464, 465,
    470, 473, 476, 469, 466, 467, 468, 471,
    472, 474, 475, 478, 479, 481, 482, 485,
    486, 487, 488, 489, 490, 500, 503, 506,
    494, 491, 492, 493, 495, 496, 497, 498,
    499, 501, 502, 504, 505, 508, 509, 510,
    511, 512, 513, 514, 515, 516, 518, 519,
    520, 521, 523, 541, 544, 547, 527, 524,
    525, 526, 528, 529, 534, 537, 540, 533,
    530, 531, 532, 535, 536, 538, 539, 542,
    543, 545, 546, 549, 550, 551, 552, 554,
    559, 562, 565, 558, 555, 556, 557, 560,
    561, 563, 564, 567, 568, 569, 570, 572,
    577, 580, 583, 576, 573, 574, 575, 578,
    579, 581, 582, 585, 586, 587, 588, 590,
    591, 593, 594, 597, 603, 606, 609, 601,
    598, 599, 600, 602, 604, 605, 607, 608,
    611, 612, 618, 621, 624, 616, 613, 614,
    615, 617, 619, 620, 622, 623, 626, 627,
    628, 633, 6, 631, 4, 634, 632, 2,
    2, 6, 635, 631, 8, 631, 8, 637,
    638, 631, 10, 633, 639, 634, 640, 17,
    631, 10, 633, 639, 634, 631, 633, 645,
    634, 641, 15, 642, 15, 642, 643, 631,
    643, 634, 645, 646, 629
  };

  static const char _parse_uri_reference_trans_actions[] = {
    11, 0, 11, 11, 23, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 3, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 11, 11, 13, 0, 13, 19, 19,
    0, 0, 15, 44, 15, 17, 0, 0,
    29, 66, 29, 54, 50, 66, 26, 5,
    58, 0, 35, 7, 58, 62, 38, 9,
    62, 5, 5, 32, 0, 7, 9, 41,
    0, 41, 0, 0, 1
  };

  static const char _parse_uri_reference_eof_actions[] = {
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 13, 47,
    21, 13, 44, 17, 13, 66, 58, 62,
    66, 58, 62, 41, 58, 41, 13
  };

  static const int parse_uri_reference_start = 1;
  static const int parse_uri_reference_first_final = 630;
  static const int parse_uri_reference_error = 0;

  static const int parse_uri_reference_en_main = 1;


  /* #line 1632 "./src/yield/uri/uri_parser.cpp" */
  {
    cs = parse_uri_reference_start;
  }

  /* #line 1637 "./src/yield/uri/uri_parser.cpp" */
  {
    int _klen;
    unsigned int _trans;
    const char* _acts;
    unsigned int _nacts;
    const unsigned char* _keys;

    if (p == pe)
      goto _test_eof;
    if (cs == 0)
      goto _out;
_resume:
    _keys = _parse_uri_reference_trans_keys + _parse_uri_reference_key_offsets[cs];
    _trans = _parse_uri_reference_index_offsets[cs];

    _klen = _parse_uri_reference_single_lengths[cs];
    if (_klen > 0) {
      const unsigned char* _lower = _keys;
      const unsigned char* _mid;
      const unsigned char* _upper = _keys + _klen - 1;
      while (1) {
        if (_upper < _lower)
          break;

        _mid = _lower + ((_upper - _lower) >> 1);
        if ((*p) < *_mid)
          _upper = _mid - 1;
        else if ((*p) > *_mid)
          _lower = _mid + 1;
        else {
          _trans += (_mid - _keys);
          goto _match;
        }
      }
      _keys += _klen;
      _trans += _klen;
    }

    _klen = _parse_uri_reference_range_lengths[cs];
    if (_klen > 0) {
      const unsigned char* _lower = _keys;
      const unsigned char* _mid;
      const unsigned char* _upper = _keys + (_klen << 1) - 2;
      while (1) {
        if (_upper < _lower)
          break;

        _mid = _lower + (((_upper - _lower) >> 1) & ~1);
        if ((*p) < _mid[0])
          _upper = _mid - 2;
        else if ((*p) > _mid[1])
          _lower = _mid + 2;
        else {
          _trans += ((_mid - _keys) >> 1);
          goto _match;
        }
      }
      _trans += _klen;
    }

_match:
    _trans = _parse_uri_reference_indicies[_trans];
    cs = _parse_uri_reference_trans_targs[_trans];

    if (_parse_uri_reference_trans_actions[_trans] == 0)
      goto _again;

    _acts = _parse_uri_reference_actions + _parse_uri_reference_trans_actions[_trans];
    _nacts = (unsigned int) * _acts++;
    while (_nacts-- > 0) {
      switch (*_acts++) {
      case 0:
        /* #line 67 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        scheme.iov_base = p;
      }
      break;
      case 1:
        /* #line 68 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        scheme.iov_len =  p - static_cast<char*>(scheme.iov_base);
      }
      break;
      case 2:
        /* #line 71 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        userinfo.iov_base = p;
      }
      break;
      case 3:
        /* #line 72 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        userinfo.iov_len = p - static_cast<char*>(userinfo.iov_base);
      }
      break;
      case 4:
        /* #line 76 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        host.iov_base = p;
      }
      break;
      case 5:
        /* #line 77 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        host.iov_len = p - static_cast<char*>(host.iov_base);
      }
      break;
      case 6:
        /* #line 80 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        port = static_cast<uint16_t>(atoi(p));
      }
      break;
      case 7:
        /* #line 85 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        path.iov_base = p;
      }
      break;
      case 8:
        /* #line 86 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        path.iov_len = p - static_cast<char*>(path.iov_base);
      }
      break;
      case 9:
        /* #line 104 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        query.iov_base = p;
      }
      break;
      case 10:
        /* #line 105 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        query.iov_len = p - static_cast<char*>(query.iov_base);
      }
      break;
      case 11:
        /* #line 107 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
      {
        fragment.iov_base = p;
      }
      break;
      /* #line 1759 "./src/yield/uri/uri_parser.cpp" */
      }
    }

_again:
    if (cs == 0)
      goto _out;
    if (++p != pe)
      goto _resume;
_test_eof:
    {}
    if (p == eof) {
      const char* __acts = _parse_uri_reference_actions + _parse_uri_reference_eof_actions[cs];
      unsigned int __nacts = (unsigned int) * __acts++;
      while (__nacts-- > 0) {
        switch (*__acts++) {
        case 4:
          /* #line 76 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          host.iov_base = p;
        }
        break;
        case 5:
          /* #line 77 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          host.iov_len = p - static_cast<char*>(host.iov_base);
        }
        break;
        case 6:
          /* #line 80 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          port = static_cast<uint16_t>(atoi(p));
        }
        break;
        case 7:
          /* #line 85 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          path.iov_base = p;
        }
        break;
        case 8:
          /* #line 86 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          path.iov_len = p - static_cast<char*>(path.iov_base);
        }
        break;
        case 9:
          /* #line 104 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          query.iov_base = p;
        }
        break;
        case 10:
          /* #line 105 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          query.iov_len = p - static_cast<char*>(query.iov_base);
        }
        break;
        case 11:
          /* #line 107 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          fragment.iov_base = p;
        }
        break;
        case 12:
          /* #line 108 "./src/yield/uri/../../../include/yield/uri/rfc3986.rl" */
        {
          fragment.iov_len = p - static_cast<char*>(fragment.iov_base);
        }
        break;
        /* #line 1811 "./src/yield/uri/uri_parser.cpp" */
        }
      }
    }

_out:
    {}
  }

  /* #line 76 "./src/yield/uri/uri_parser.rl" */


  return cs != parse_uri_reference_error;
}
}
}

#ifdef _WIN32
#pragma warning(pop)
#else
#pragma GCC diagnostic error "-Wold-style-cast"
#pragma GCC diagnostic error "-Wunused-variable"
#endif
//
